using System;
using System.Windows.Forms;
using App.Git.Vista.Widgets;
using App.Modelo.Attributes;
using App.Modelo.Menu;
using App.Persistencia;
using App.Seguridad.Vista.Menu;
using App.SolInf.Controlador;
using App.SolInf.Modelo;
using App.SolInf.Vista.Controls;
using NHibernate.Criterion;

namespace App.SolInf.Vista.Listado
{
    [Formulario("Compras")]
    public partial class ListadoCompras: ListadoBusquedaGenerico
    {
        public Repositorio Repositorio;
        private DocumentacionProcedencia ControlBusqueda;

        private ControladoraCompras _controladoraCompras;
        public ControladoraCompras ControladoraCompras
        {
            get
            {
                return _controladoraCompras ??
                       (_controladoraCompras =
                        ModuloSolInf.Instance.FabricaControladoras.Factory<ControladoraCompras>());
            }
            set
            {
                _controladoraCompras = value;
            }
        }

			
        public ListadoCompras()
        {
            ContenedorModulo = ModuloSolInf.Instance;

            BotonCancelar = BotonSeleccionar = false;

            FormatoColumna(AddColumn("FechaAlta"), ListadoFormatoCell.FechaCorta);
            AddColumn("Documentacion");
            AddColumn("Proveedor");
            FormatoColumna(AddColumn("Total"), ListadoFormatoCell.Moneda);
            EstablecerAnchos(70, 150, 70, 100, 70);

            
            ControlBusqueda=new DocumentacionProcedencia();

            SearchControls.Add(ControlBusqueda);

            Repositorio = new Repositorio();

            var controladorBoton = new MenuControladoraBotonera
            {
                Controls = ControlesGestion,
                Model = new MenuContenedor(new MenuBaseItem[] {
                        new MenuBoton("Nuevo", "add", "Compras/alta"),
                        new MenuBoton("Ver", "view", "Compras/ver"),
                        new MenuBoton("Modificar", "edit", "Compras/modificar"),
                        new MenuBoton("Eliminar", "delete", "Compras/baja")
                    })
            };

            controladorBoton.ExecuteCommand += new EventHandler<MenuEjecutarComandoEventArgs>(controladorBoton_ExecuteCommand);
        }


        void controladorBoton_ExecuteCommand(object sender, MenuEjecutarComandoEventArgs e)
        {
            var item = GetSelectedItem<Compra>();

            if (e.Item.Command == "Compras/alta")
            {
                new Comandos.ComandoAltaCompra().Ejecutar();
            }
            else if (e.Item.Command == "Compras/ver" && _seleccionar())
            {
                var form = new DetalleCompra()
                {
                    Compra =  item,
                    ControladoraCompras = ControladoraCompras
                };
                form.Ver();
            }
            else if (e.Item.Command == "Compras/modificar" && _seleccionar())
            {
                var form = new DetalleCompra()
                {
                    Compra = item,
                    ControladoraCompras = ControladoraCompras
                };
                form.Modificar();
            }
            else if (e.Item.Command == "Compras/baja" && _confirmar())
            {
                try
                {
                    ControladoraCompras.Baja(item);
                    MessageBox.Show("Se elimino la compra", Text);
                    OnSearch();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }


        protected override void OnSearch()
        {
            DataSource = ControlBusqueda.AplicarFiltro(Repositorio.CreateCriteria<Compra>())
                .AddOrder(new Order("FechaAlta", false)).List();
        }

        [Comando("modificar", "Modifica un cliente existente en la base de datos")]
        public void Modificar()
        {
            Text = "Modificar compras";
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("ver")]
        public void ver()
        {
            Text = "Ver compras";
            ContenedorModulo.AbrirFormulario(this);
        }

        [Comando("baja")]
        public void Baja()
        {
            Text = "Baja de compras";
            ContenedorModulo.AbrirFormulario(this);
        }

        
    }
}